import networkx as nx
import matplotlib.pyplot as plt

import csv

# 01.csv 为2022.1.1 当日的数据集子集,用来生成网络的点集
# 01.edge.txt为2022.1.1 当日的数据集子集(但是属性名隐藏),用来生成网络的边集
# set.csv 为题目给出的所有子集

# 读取文件,生成点集
with open('01.csv', 'rt') as csvfile:
    reader = csv.DictReader(csvfile)
    column1 = list({row['field1'] for row in reader})
print(column1)
print(len(column1))

# 读取文件,生成边集
edge = []
with open('01edge.txt', 'r') as f:
    data = f.readlines()
    for line in data:
        # print (line)
        line = tuple(line.replace('\r', '').replace('\n', '').replace('\t', '').split(','))
        edge.append(line)
print(edge)

# 绘制网络图像,网络呈现圆形
# 改变网络布局修改pos属性,具体可以参考以下属性
# circular_layout：节点在一个圆环上均匀分布
# random_layout：节点随机分布
# shell_layout：节点在同心圆上分布
# spring_layout： 用Fruchterman-Reingold算法排列节点（样子类似多中心放射状）
# spectral_layout：根据图的拉普拉斯特征向量排列节

G = nx.DiGraph()
G.add_nodes_from(column1)
G.add_weighted_edges_from(edge)

nx.draw_networkx(G, pos=nx.random_layout(G), node_size=15, node_shape='o', \
                 width=1, style='solid', font_size=15,font_color='r')

plt.show()
# print ( G.nodes())
